'use strict';
const db = uniCloud.database();
const _ = db.command;

exports.main = async (event, context) => {
  try {
    // 获取请求参数
    const { id, name, icon } = event;
    const { OPENID } = context;
    
    // 验证请求参数
    if (!id) {
      return {
        code: 400,
        message: '分类ID不能为空'
      };
    }
    
    if (!name || name.trim() === '') {
      return {
        code: 400,
        message: '分类名称不能为空'
      };
    }
    
    if (!icon) {
      return {
        code: 400,
        message: '分类图标不能为空'
      };
    }
    
    // 验证管理员权限
    const adminInfo = await db.collection('admin_users')
      .where({
        openid: OPENID,
        is_active: true
      })
      .field({
        _id: 1,
        username: 1,
        role: 1
      })
      .get();
    
    if (adminInfo.data.length === 0) {
      return {
        code: 403,
        message: '您没有管理员权限'
      };
    }
    
    // 验证分类是否存在
    const categoryInfo = await db.collection('categories')
      .doc(id)
      .get();
    
    if (!categoryInfo.data) {
      return {
        code: 404,
        message: '分类不存在'
      };
    }
    
    // 检查分类名称是否已存在
    const existingCategory = await db.collection('categories')
      .where({
        name: name.trim(),
        _id: _.neq(id)
      })
      .count();
    
    if (existingCategory.total > 0) {
      return {
        code: 400,
        message: '分类名称已存在，请使用其他名称'
      };
    }
    
    // 构建更新数据
    const updateData = {
      name: name.trim(),
      icon,
      update_time: Date.now()
    };
    
    // 执行更新操作
    await db.collection('categories')
      .doc(id)
      .update(updateData);
    
    // 记录操作日志
    await db.collection('admin_logs').add({
      admin_id: adminInfo.data[0]._id,
      admin_name: adminInfo.data[0].username,
      action: 'update_category',
      target_id: id,
      target_name: name.trim(),
      changes: {
        name: name.trim(),
        icon
      },
      create_time: Date.now()
    });
    
    return {
      code: 0,
      message: '更新分类成功'
    };
    
  } catch (error) {
    console.error('更新分类失败:', error);
    return {
      code: 500,
      message: '更新分类失败，请稍后重试',
      error: error.message
    };
  }
};